#!/bin/bash

#启动调试
set -x

#关闭调试 
set +x

#显示当前时间
echo `date +%Y-%m-%d-%H:%M:%S`

#显示颜色
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"

#特殊变量列表
$0 当前脚本的文件名
$n 传递给脚本或函数的参数,n是一个数字,表示第几个参数,第一个参数是$1,第二个参数是$2
$# 传递给脚本或函数的参数个数
$* 传递给脚本或函数的所有参数
$@ 传递给脚本或函数的所有参数
不被双引号(" ")包含时,都以"$1" "$2"..."$n"的形式输出所有参数.但是当它们被双引号(" ")包含时,"$*"会将所有的参数
作为一个整体,以"$1 $2 ...$n"的形式输出所有参数。"$@"会将各个参数分开，以"$1""$2"..."$n"的形式输出所有参数。
$? 上个命令的退出状态，或函数的返回值
$$ 当前shell进程ID，对于shell脚本，就是这些脚本所在的进程ID

#读取终端输入信息
read PERSON

#变量赋值,可以加单引号,双引号,不加引号,建议:数字不加引号,原样输出单引号,字符串双引号(双引号中可以有变量、转移字符)
variable=value
variable='value'
variable="value"

#使用变量,建议第二种
echo $variable
echo ${variable}

#将命令的结果赋值给变量,建议第二种
variable=`command`
variable=$(command)

#只读变量
variable="value"
readonly variable

#删除变量,不能删除只读变量
unset variable

#expr加法 +  -  \*  /  %
val=`expr 2 + 2`
val=$(expr 2 + 2)

#算术运算符列表
+	加法	`expr $a + $b` 结果为 30。
-	减法	`expr $a - $b` 结果为 10。
*	乘法	`expr $a \* $b` 结果为  200。
/	除法	`expr $b / $a` 结果为 2。
%	取余	`expr $b % $a` 结果为 0。
=	赋值	a=$b 将把变量 b 的值赋给 a。
==	相等。用于比较两个数字，相同则返回 true。	[ $a == $b ] 返回 false。
!=	不相等。用于比较两个数字，不相同则返回 true。	[ $a != $b ] 返回 true。

#关系运算符列表,只支持数字
-eq	检测两个数是否相等，相等返回 true。	               [ $a -eq $b ] 返回 true。
-ne	检测两个数是否相等，不相等返回 true。	              [ $a -ne $b ] 返回 true。
-gt	检测左边的数是否大于右边的，如果是，则返回 true。    	 [ $a -gt $b ] 返回 false。
-lt	检测左边的数是否小于右边的，如果是，则返回 true。  	  [ $a -lt $b ] 返回 true。
-ge	检测左边的数是否大等于右边的，如果是，则返回 true。	 [ $a -ge $b ] 返回 false。
-le	检测左边的数是否小于等于右边的，如果是，则返回 true。	[ $a -le $b ] 返回 true。

#布尔运算符
!	非运算，表达式为 true 则返回 false，否则返回 true。	[ ! false ] 返回 true。
-o	或运算，有一个表达式为 true 则返回 true。        	  [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a	与运算，两个表达式都为 true 才返回 true。	          [ $a -lt 20 -a $b -gt 100 ] 返回 false。

#字符串运算符列表
=	检测两个字符串是否相等，相等返回 true。	  [ $a = $b ] 返回 false。
!=	检测两个字符串是否相等，不相等返回 true。  [ $a != $b ] 返回 true。
-z	检测字符串长度是否为0，为0返回 true。  	[ -z $a ] 返回 false。
-n	检测字符串长度是否为0，不为0返回 true。	   [ -z $a ] 返回 true。
str	检测字符串是否为空，不为空返回 true。	   [ $a ] 返回 true。

#文件测试运算符列表
-b file	检测文件是否是块设备文件，如果是，则返回 true。	[ -b $file ] 返回 false。
-c file	检测文件是否是字符设备文件，如果是，则返回 true。	[ -b $file ] 返回 false。
-d file	检测文件是否是目录，如果是，则返回 true。	[ -d $file ] 返回 false。
-f file	检测文件是否是普通文件（既不是目录，也不是设备文件），如果是，则返回 true。	[ -f $file ] 返回 true。
-g file	检测文件是否设置了 SGID 位，如果是，则返回 true。	[ -g $file ] 返回 false。
-k file	检测文件是否设置了粘着位(Sticky Bit)，如果是，则返回 true。	[ -k $file ] 返回 false。
-p file	检测文件是否是具名管道，如果是，则返回 true。	[ -p $file ] 返回 false。
-u file	检测文件是否设置了 SUID 位，如果是，则返回 true。	[ -u $file ] 返回 false。
-r file	检测文件是否可读，如果是，则返回 true。	[ -r $file ] 返回 true。
-w file	检测文件是否可写，如果是，则返回 true。	[ -w $file ] 返回 true。
-x file	检测文件是否可执行，如果是，则返回 true。	[ -x $file ] 返回 true。
-s file	检测文件是否为空（文件大小是否大于0），不为空返回 true。	[ -s $file ] 返回 true。
-e file	检测文件（包括目录）是否存在，如果是，则返回 true。	[ -e $file ] 返回 true。

#定义数组
array_name=(value0 value1 value2 value3)
或
array_name=(
value0
value1
value2
value3
)
或
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
读取数组元素值的一般格式是：
${array_name[index]}
使用@ 或 * 可以获取数组中的所有元素，例如：
${array_name[*]}
${array_name[@]}
获取数组长度的方法与获取字符串长度的方法相同，例如：
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

